package com.wjm.api.ObjectIO;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 * Data:2022年07月22日
 * Author:wjm
 * Content: ObjectInputStream（反序列化）
 *
 *
 *  ObjectInputStream是一个高级流
 *
 *  放序列化：实现字节转化为对象的过程，此过程叫反序列化
 *
 *  反序列化方法
 *       Object readObject() 从流中读取字节转换为对应对象
 *
 *  注意：
 *      需要注意的是版本号的一致性（SerializableUID）
 *
 */
public class ObjectInputStreamDemo {
    public static void main(String[] args) {

        //jdk1.7之后的try和catch会自动关流
        try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("EMP.txt"));){
            //反序列化
            Object obj1 = inputStream.readObject();
            //因为我们知道它是Emp类型所以强转为Emp类型
            Emp emp1 = (Emp)obj1;
            System.out.println(obj1);

            //反序列化
            Object obj2 = inputStream.readObject();
            //因为我们知道它是Emp类型所以强转为Emp类型
            Emp emp2 = (Emp)obj2;
            System.out.println(obj2);

            //反序列化
            Object obj3 = inputStream.readObject();
            //因为我们知道它是Emp类型所以强转为Emp类型
            Emp emp3 = (Emp)obj3;
            System.out.println(obj3);

            /*
                使用while循环来反序列化

                文件末尾标识是：java.io.EOFException（如果不想出现这个标识，可以在序列化的最后在序列化一个null）

                Object obj = null;
                while ((obj = inputStream.readObject()) != null){
                     System.out.println(obj);
                     }
            */


        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
